/**
* class CubeGraphicSetts - contains graphical settings of Cube 
* for OpenGL.
**/

#ifndef _CUBE_GRAPHIC_SETTINGS_H_
#define _CUBE_GRAPHIC_SETTINGS_H_

#include "Point3D.h"
#include "Color.h"
#include <cmath>

namespace FemViewer
{
	class CubeGprahicSetts 
	{
	public: // methods
		
		// default constructor
		CubeGprahicSetts();
		
		// destructor
		~CubeGprahicSetts() {};

		// resets settings to default values
		void defaults();

	public: // members

		typedef enum {
			CUBE_NONE	= 0x00,
			CUBE_FILL	= 0x01,
			CUBE_LINE	= 0x02,
			CUBE_POINTS = 0x04,
		} cube_mask;

		struct CubeDims
		{
			static const int max_cells;
			float x, y, z;
			short x_cell, y_cell, z_cell;

			CubeDims(float x_ = 1.2f, float y_ = 1.2f, float z_ = 1.2f,
				short xc_ = 4, short yc_ = 4, short zc_ = 4)
			{
				x = fabs(x_); y = fabs(y_); z = fabs(z_);
				x_cell = ::Clump2Type<short>(xc_,2,max_cells);
				y_cell = ::Clump2Type<short>(yc_,2,max_cells);
				z_cell = ::Clump2Type<short>(zc_,2,max_cells);
			}
		};

		// dimensions
		CubeDims dims;
			
		// point of cube orig
		Point3D<float> originPt;

		// color for fill background of cube
		ColorRGBA bkgColor;

		// color for cube lines in gray-scale
		float lineColor;

		// size of cube lines
		float lineWidth;

		// color for cube points
		float pointColor;

		// size of cube points
		float pointSize;

		// mask for element drawing
		cube_mask cubeMask;

	protected:

		

	private: // not implemented
		
		// copy constructor
		CubeGprahicSetts(const CubeGprahicSetts&);

		// asigmend operator
		//CubeGprahicSetts& operator=(const CubeGprahicSetts&);

		// 

	};
}

#endif /* _CUBE_GRAPHIC_SETTINGS_H_
*/
